package com.kanshu.service;

import java.io.IOException;
import java.io.ObjectOutputStream;
/**
 * @author GAIst
 * @ClassName NovelService.java
 * @From
 * @Description OK
 * @createTime 2024年12月20日14:32:26
 */
public interface NovelService {
    /**
     * 下载小说功能
     *
     * @param request 用户请求，包含小说索引和类型信息
     * @param out     用于向客户端发送数据的对象输出流
     * @throws IOException 如果文件读写操作失败
     */
    void downloadNovel(Object request, ObjectOutputStream out) throws IOException;

    /**
     * 读取完整小说内容的方法
     *
     * @param request 用户请求对象，包含小说索引和类型等信息
     * @param out 输出流对象，用于向客户端发送数据
     * @throws IOException 如果文件读取或网络通信发生错误
     */
    void readNovelAll(Object request, ObjectOutputStream out) throws IOException;

    /**
     * 根据请求发送小说列表
     * 该方法从XML文件中读取小说信息，并将小说列表以字符串形式发送出去
     *
     * @param request 请求对象，用于指定所需小说列表的类型
     * @param out 输出流对象，用于向客户端发送数据
     */
    void sendNovelList(Object request, ObjectOutputStream out);

    /**
     * 向客户端发送小说类型列表
     * 本方法通过ObjectOutputStream对象将小说类型信息写入输出流，以实现向客户端发送小说类型列表的功能
     *
     * @param out ObjectOutputStream对象，用于将小说类型列表输出到客户端
     */
    void sendNovelTypeList(ObjectOutputStream out);

    /**
     * 读取小说内容
     *
     * @param request 请求对象，包含小说信息
     * @param out 输出流对象，用于向客户端发送数据
     * @throws IOException 如果读取文件时发生错误
     */
    void readNovel(Object request,ObjectOutputStream out) throws IOException;

    /**
     * 上传小说功能实现
     * 此方法处理小说上传请求，根据请求信息检查小说是否已存在，如果不存在则保存小说信息到指定路径
     *
     * @param request 请求对象，包含小说信息字符串，格式为"0.上传小说1.小说类型2.小说名称3.小说作者4.小说简介5.小说路径"，各部分信息间用"*"分隔
     * @param out 输出流对象，用于向客户端发送上传状态信息
     * @throws IOException 如果文件操作或流操作发生错误，抛出此异常
     */
    void uploadNovel(Object request, ObjectOutputStream out) throws IOException;
}
